/*
 * @Author: 马思宁 598138645@qq.com
 * @Date: 2024-04-08 09:54:25
 * @LastEditors: 马思宁 598138645@qq.com
 * @LastEditTime: 2024-05-08 15:50:24
 * @FilePath: \v-koa\src\middleware\user.middleware.js
 * @Description: 用户中间件
 */
const UserService = require("../service/user.service");
const { NAME_OR_PASSWORD_IS_REQUIRED, NAME_IS_ALREADY_EXISTS } = require("../config/error");
const md5password = require("../utils/md5-password");

/**
 * 验证用户名和密码
 * @param {*} ctx
 * @param {*} next
 */
async function verifyUser(ctx, next) {
  // 1.取出用户名和密码
  const { username, password } = ctx.request.body;

  // 2. 判断逻辑(验证客户端传递过来的user是否可以保存到数据库中)
  // 2.1验证用户名和密码是否为空
  if (!username || !password) {
    return ctx.app.emit("error", NAME_OR_PASSWORD_IS_REQUIRED, ctx);
  }

  // 2.2验证用户名是否已经存在
  const users = await UserService.getUserByName(username);
  if (users.length) {
    return ctx.app.emit("error", NAME_IS_ALREADY_EXISTS, ctx);
  }

  // 3. 执行下一个中间件
  await next();
}

/** 加密密码
 * @param {*} ctx
 * @param {*} next
 */
const handlePassword = async (ctx, next) => {
  const { password } = ctx.request.body;
  // 对密码加密
  ctx.request.body.password = md5password(password);
  // 执行下一个中间件
  await next();
};

module.exports = {
  verifyUser,
  handlePassword,
};
